#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef steuct LNode
{
    ElemType date;
    struct LNode *next;
}LinkNode;
void CreateListF(LinkNode *&L,ElemType a[],int n)
{
    LinkNode *s;
    L=(LinkNode *)malloc(sizeof(LinkNode));
    L->next=NULL;
    for(int i=0;i<n;i++)
    {
        s=(LinkNode *)malloc(sizeof(LinkNode));
        s->Date=a[i];
        s->Next=L->Next;
        L->Next=s;
    }
}
void CreateListR(LinkNode *&L,ElemType a[],int n)
{
    LinkNode *s, *r;
    L=(LinkNode *)malloc(sizeof(LinkNode));
    L->next=NULL;
    r=L;
    for(int i=0;i<n;i++)
    {
        s=(LinkNode *)malloc(sizeof(LinkNode));
        s->Date=a[i];
        r->next=s;
        r=s;

    }
    r->next=NULL;
}
void InitList(LinkNode *&L)
{
    L=(LinkNode *)malloc(sizeof(LinkNode));
    L->next=NULL;
}
void DestroyList(LinkNode *&L)
{
    LinkNode *pre=L,*p=pre->next;
    while(p!=NULL)
    {
        free(pre);
        pre=p;
        p=pre->next;
    }
    free(pre);
}
bool ListEmpty(LinkNode *L)
{
    return (L->next==NULL);
}
int ListLength(LinkNode *L)
{
    LinkNode *s;
    int i=0;
    s=L;
    while(s->next==NULL)
    {
        i+=1;
        s=s->next;
    }
    return i;
}
void DispList(LinkNode *L)
{
    LinkNode *p;
    p=L;
    while(p->next!=NULL)
    {
        printf("%c",p->next->Date);
        p=p->next;
    }
    printf("/n");
}
bool GetElem(LinkNode *L,int i)
{
    int j=0;
    LinkNode *p=L;
    if(i<=0) return false;
    while(j<i&&p!=NULL)
    {
        j++;
        p=p->next;
    }
    if(p==NULL) return false;
    else
    {
        return (p->Date);
    }
}
int LocateElem(LinkNode *&L,ElemType e)
{
    LinkNode *p=L-next;
    int i=1;
    while(p!=NULL&&p->Date!=e)
    {
        p=p->next;i++
    }
    if(p==NULL)
    return 0;
    else
    return i;
}
bool ListInsert(LinkNode *L,int i,ElemType e)
{
    LinkNode *p=L->next,*q;
    if(i<=0) return false;
    for(int j=1;j<=i;j++)
    {
        if(p==NULL)
        return false;
        else
        p=p->next;
    }
    q=(LinkNode *)malloc(sizeof(LinkNode));
    q->Date=e;
    q->next=p->next;
    p->next=q;
    return true;
}
bool ListDelete(LinkNode *L,int i)
{
    LintNode *p,*q;
    p=L->next;
    if(i<=0) return false;
    for(int j=0;j<i;j++)
    {
        if(p==NULL)
        return false;
        else
        p=p->next;
    }
    q=p->next;
    if(q==NULL)
    return false;
    p->next=p->next->next;
    free(q);
    return true;
}
